<?php

namespace App\Http\Controllers\Car;

use App\Models\CarModels\CarTask;
use Illuminate\Http\Request;
use Illuminate\Database\QueryException;
use App\Http\Controllers\Controller;
use App\Models\Landscaping\ParkTask;
use App\Models\Landscaping\ParkTaskFile;
use App\Http\Requests\Landscaping\ParkTaskRequest;
use Illuminate\Support\Facades\DB;
use Validator;

/**
 * @group 任务管理->车辆->车辆-任务管理
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class CarTaskController extends Controller
{
    /**
     * 任务管理查看列表
     *
     * @queryParam task_name string 任务名称
     * @queryParam task_type int 任务类型  0-环卫保洁 1-园林养护 2-路面洒水 3-垃圾清理
     * @queryParam task_content string 任务详细
     * @queryParam user int 人员 外键 员工表
     * @queryParam car_id int 任务车辆id 外键 车辆信息表
     * @queryParam task_begin_time datetime 任务开始时间
     * @queryParam task_end_time datetime 任务结束时间
     * @queryParam task_level int 紧急程度  1-一级 2-二级 3-三级
     * @queryParam task_status string 任务状态 0=待完成 1=处理中 2=已完成
     * @queryParam car->plates_number string 车牌号
     *
     * @bodyParam kind int optional 过滤车辆类型(精确匹配) 对应车辆类型表的主键来过滤 查看车辆类型可以在车辆类型展示接口来查看
     * @bodyParam search string optional 人员名称 通过人员名称来搜索信息(模糊匹配) 人员对应员工表
     * @bodyParam user_id int optional 通过员工的id号来搜索员工对应的任务
     * @bodyParam status int optional 筛选匹配上面的task_status
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $query = CarTask::with('car')->with('user');
        $query->whereHas('car', function ($q) use ($request) {
            $request->has('kind') && $q->where('kinds_id', $request->get('kind'));
        });
        $query->whereHas('user', function ($q) use ($request) {
            $request->has('search') && $q->where('name', 'like', "%{$request->get('search')}%");
        });

        $query->whereHas('user', function ($q) use ($request) {
            $request->has('user_id') && $q->where('id','=',$request->get('user_id'));
        });

        $request->has('status') && $query->where('task_status','=',$request->get('status'));
        $query->orderBy('task_level','asc');
        return response()->json(encodeMsg(pageQuery($query, $request), 200), 200);
    }

    /**
     * 添加任务
     *
     * @bodyParam task_name string required 任务名称
     * @bodyParam task_type int required 任务类型  0-环卫保洁 1-园林养护 2-路面洒水 3-垃圾清理
     * @bodyParam task_content string required 任务详细
     * @bodyParam user_id int required 人员表 外键 员工表
     * @bodyParam car_id int required 任务车辆id 外键 车辆信息表
     * @bodyParam task_begin_time datetime required 任务开始时间
     * @bodyParam task_end_time datetime required 任务结束时间
     * @bodyParam task_level int required 紧急程度  1-一级 2-二级 3-三级
     * @bodyParam task_status string required 任务状态 0=待完成 1=处理中 2=已完成
     *
     *
     * @queryParam task_name string 任务名称
     * @queryParam task_type int 任务类型  0-环卫保洁 1-园林养护 2-路面洒水 3-垃圾清理
     * @queryParam task_content string 任务详细
     * @queryParam user_id int 人员 外键 员工表
     * @queryParam car_id int 任务车辆id 外键 车辆信息表
     * @queryParam task_begin_time datetime 任务开始时间
     * @queryParam task_end_time datetime 任务结束时间
     * @queryParam task_level int 紧急程度  1-一级 2-二级 3-三级
     * @queryParam task_status string 任务状态 0=待完成 1=处理中 2=已完成
     * @queryParam car->plates_number string 车牌号
     *
     */
    public function store(Request $request)
    {

        $validator = Validator::make($request->all(), genValidate());
        if ($validator->fails()) {
            return response()->json(encodeMsg($validator->errors()->messages(), 400), 400);
        }
        $data = CarTask::create($request->all());
        return response()->json(encodeMsg($data, 201));

    }

    /**
     * 查看单个任务
     *
     * @bodyParam  id int required 任务ID
     *
     *
     * @queryParam task_name string 任务名称
     * @queryParam task_type int 任务类型  0-环卫保洁 1-园林养护 2-路面洒水 3-垃圾清理
     * @queryParam task_content string 任务详细
     * @queryParam user int 人员 外键 员工表
     * @queryParam car_id int 任务车辆id 外键 车辆信息表
     * @queryParam task_begin_time datetime 任务开始时间
     * @queryParam task_end_time datetime 任务结束时间
     * @queryParam task_level int 紧急程度  1-一级 2-二级 3-三级
     * @queryParam task_status string 任务状态 0=待完成 1=处理中 2=已完成
     * @queryParam car->plates_number string 车牌号
     *
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $data = CarTask::with('user')->with('car')->find($id);
        if ($data == []) {
            return response()->json(encodeMsg(["message" => "没有该任务信息!"], 404));
        } else {
            return response()->json(encodeMsg($data, 200));
        }
    }

    /**
     * 修改任务
     *
     * @bodyParam task_name string optional 任务名称
     * @bodyParam task_type int optional 任务类型  0-环卫保洁 1-园林养护 2-路面洒水 3-垃圾清理
     * @bodyParam task_content string optional 任务详细
     * @bodyParam user_id int optional 人员表 外键 员工表
     * @bodyParam car_id int optional 任务车辆id 外键 车辆信息表
     * @bodyParam task_begin_time datetime optional 任务开始时间
     * @bodyParam task_end_time datetime optional 任务结束时间
     * @bodyParam task_level int optional 紧急程度  1-一级 2-二级 3-三级
     * @bodyParam task_status string optional 任务状态 0=待完成 1=处理中 2=已完成
     *
     *
     * @queryParam task_name string 任务名称
     * @queryParam task_type int 任务类型  0-环卫保洁 1-园林养护 2-路面洒水 3-垃圾清理
     * @queryParam task_content string 任务详细
     * @queryParam user_id int 人员 外键 员工表
     * @queryParam car_id int 任务车辆id 外键 车辆信息表
     * @queryParam task_begin_time datetime 任务开始时间
     * @queryParam task_end_time datetime 任务结束时间
     * @queryParam task_level int 紧急程度  1-一级 2-二级 3-三级
     * @queryParam task_status string 任务状态 0=待完成 1=待反馈 2=已经反馈 3=已完成
     * @queryParam car->plates_number string 车牌号
     *
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {

        $validator = Validator::make($request->all(), genValidate());
        if ($validator->fails()) {
            return response()->json(encodeMsg($validator->errors()->messages(), 400), 400);
        }

        $carTask = CarTask::find($id);
        if ($carTask == []) {
            return response()->json(encodeMsg(["message" => "没有该任务信息!"], 404));
        }

        $carTask->update($request->all());
        return response()->json(encodeMsg($carTask, 200));

    }

    /**
     * 删除任务
     *
     * @bodyParam id int required 任务ID
     * @response 204 {
     *   "message": "任务删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该任务信息"
     * }
     *
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $parkTask = CarTask::find($id);
        if ($parkTask == []) {
            return response()->json(encodeMsg(["message" => "没有该任务信息!"], 404));
        }
        if ($parkTask->delete()) {
            return response()->json(encodeMsg(["message" => "删除成功!"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "删除失败!"], 400));
        }
    }

    /**
     * 任务批量删除
     *
     * @bodyParam ids int required id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "任务删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        CarTask::whereIn('id', $listId)->delete();
        return response()->json(encodeMsg(["message" => "任务删除成功!"], 204));
    }
}
